如何通过除“class”和“name”之外的属性直接查找WebElements(例如“title”)
我是Java和Selenium的新手,所以如果我的问题听起来有些重要,我会提前道歉。
我用:
driverChrome.findElements(By.className("blabla"));
查找具有“blabla”作为其className的元素,例如:
...
现在,如果我想通过其他属性查找所有元素,该怎么办? 就像是:
driverChrome.findElements(By.titleValue("the title"));
这是我目前用于执行此任务的代码:
List spans = driverChrome.findElements(By.tagName("span")); for (WebElement we : spans) { if (we.getAttribute("title") != null) { if (we.getAttribute("title").equals("the title")) { ... break; } } }
但它并不快速且易于使用。
通过XPath归档元素时有很多方法
1绝对的道路
获取“输入”标签
xpath="/html/body/div/form/input"
2相对路径
获取“输入”标签
xpath="//input"
3指数
获取输入’demo2′
的xpath = “//输入[1]”
4任意单一属性
获取输入’demo2′
xpath="//input[@id='demo2']" (equivalent to By.id)
要么
xpath="//input[@foo='bar']"
5任意多个属性
获得第三个输入
xpath="//input[@type='submit'][@foo='bar']"
要么
xpath="//input[@type='submit' and @foo='bar']"
如果使用xpath =“// input [@ type =’submit’或@ foo =’bar’]”,那么你将获得一个数组。 您可以通过driver.findElements(By.xpath(xpath))(java)获取List。 否则你将得到第一个元素(如果你只使用driver.findElement)。 因为所有3个输入元素都满足您的条件’或’,它会为您提供第一个。
6包含属性
获得第二个输入
xpath="//input[@daddy]"
因为只有第二个属性’爸爸’
7内在搜索
获得第二个div
xpath="//div[.//input[@daddy='dog'] and .//input[@daddy='apple']]"
总的来说,这些都是我现在可以解决的问题。 希望能帮助到你。
你可以使用xpath做到这一点
driverChrome.findElement(By.xpath("//*[@yourAttribute='value']"));
例如:
driverChrome.findElement(By.xpath("//*[@title='the title']"));
您也可以使用CSS定位器实现此目的。
By.cssSelector(“span [title =’the title’]”)
传言CSS选择器更快。
我们在实践中介绍了Selenium WebDriver中的一些定位技术: http : //selenium-webdriver-in-practice.github.io
您可以选择多种选择。
- 通过css选择器
- 由xpath
- 通过id
- 通过标签为方便阅读教程,请点击以下链接: http : //www.w3schools.com/xsl/xpath_syntax.asp http://www.w3schools.com/cssref/css_selectors.asp
以上都是使用元素属性,或者,您可以使用元素之间的关系。 如兄弟姐妹,父母和孩子。
有关更多详细信息,请参阅此精彩链接。 http://scraping.pro/res/xpath-cheat/xpath_css_dom_recipes.pdf
您也可以使用非常好的支持和建立的框架。 例如,机器人框架,它将极大地简化您的代码。
http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
WebElement element = driver.findElement(By.xpath(".//*[@id='ctl00_PLSMainContent_AssistTaskList_assistListView']/div/table/tbody/tr/td[7]/span")); System.out.println("get attribute is --> " + element.getAttribute("Title"));