我是 Java 和 Selenium 的新手,所以如果我的问题听起来有点初级,我提前道歉.
我使用:
driverChrome.findElements(By.className("blabla"));
查找以blabla"作为其类名的元素,例如:
<span class="blabla" title="标题">...</span>
现在,如果我想通过其他属性查找所有元素怎么办?类似:
driverChrome.findElements(By.titleValue("the title"));
这是我目前用于执行此任务的代码:
列表spans = driverChrome.findElements(By.tagName("span"));for (WebElement we : spans) {if (we.getAttribute("title") != null) {if (we.getAttribute("title").equals("the title")) {...休息;}}}
但它并不快速且易于使用.
XPath
归档元素有很多方法<html><身体><表格><输入 id="demo"/></表格></div></身体><html>获取输入"标签
xpath="/html/body/div/form/input"
2 相对路径
<html><身体><表格><输入 id="demo"/></表格></div></身体><html>获取输入"标签
xpath="//输入"
3 索引
<html><身体><表格><输入id="demo1"/><输入id="demo2"></表格></div></身体><html>获取输入'demo2'
xpath="//输入[1]"
4 任意单个属性
<html><身体><表格><输入id="demo1"/><输入 id="demo2" foo="bar"></表格></div></身体><html>获取输入'demo2'
xpath="//input[@id='demo2']" (相当于By.id)
或者
xpath="//input[@foo='bar']"
5 任意多个属性
<html><身体><表格><输入id="1" type="提交"/><输入 id="2" foo="bar"/><input id="3" type="submit" foo="bar"/></表格></div></身体><html>获取第三个输入
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) 获取列表.否则你会得到第一个元素(如果你只使用 driver.findElement).因为所有 3 个输入元素都满足您的条件或",它给了您第一个.
6 包含属性
<html><身体><表格><输入id="1" type="提交"/><input id="2" foo="bar" daddy="dog"/><input id="3" type="submit" foo="bar"/></表格></div></身体><html>获取第二个输入
xpath="//input[@daddy]"
因为只有第二个有属性'daddy'
7 内搜索
<html><身体><表格><input id="input1" daddy="dog"/><input id="input2" daddy="pig"/></表格></div><表格><input id="input3" daddy="dog"/><input id="input4" daddy="apple"/></表格></div></身体><html>获取第二个div
xpath="//div[.//input[@daddy='dog'] 和 .//input[@daddy='apple']]"
总的来说,这些都是我现在可以解决的.希望对您有所帮助.
I am very new at Java and Selenium so my apologies in advance if my question sounds a bit primary.
I use:
driverChrome.findElements(By.className("blabla"));
to find elements which have "blabla" as their className, for example:
<span class="blabla" title="the title">...</span>
Now, what if I want to find all elements by their other attributes? something like:
driverChrome.findElements(By.titleValue("the title"));
This is the code that I am currently using to do this task:
List<WebElement> spans = driverChrome.findElements(By.tagName("span"));
for (WebElement we : spans) {
if (we.getAttribute("title") != null) {
if (we.getAttribute("title").equals("the title")) {
...
break;
}
}
}
but it is not fast and easy to use.
解决方案 There are many methods while archiving an element by XPath
1 Absolutely path
<html>
<body>
<div>
<form>
<input id="demo"/>
</form>
</div>
</body>
<html>
To get the 'input' tag
xpath="/html/body/div/form/input"
2 Relative path
<html>
<body>
<div>
<form>
<input id="demo"/>
</form>
</div>
</body>
<html>
To get the 'input' tag
xpath="//input"
3 Index
<html>
<body>
<div>
<form>
<input id="demo1"/>
<input id="demo2">
</form>
</div>
</body>
<html>
To get the input 'demo2'
xpath="//input[1]"
4 Arbitrary single attribute
<html>
<body>
<div>
<form>
<input id="demo1"/>
<input id="demo2" foo="bar">
</form>
</div>
</body>
<html>
To get input 'demo2'
xpath="//input[@id='demo2']" (equivalent to By.id)
Or
xpath="//input[@foo='bar']"
5 Arbitrary multiple attributes
<html>
<body>
<div>
<form>
<input id="1" type="submit" />
<input id="2" foo="bar"/>
<input id="3" type="submit" foo="bar"/>
</form>
</div>
</body>
<html>
To get 3rd input
xpath="//input[@type='submit'][@foo='bar']"
Or
xpath="//input[@type='submit' and @foo='bar']"
If use xpath="//input[@type='submit' or @foo='bar']" here you'll get an array. You can get the List by driver.findElements(By.xpath(xpath)) (java). Otherwise you'll get the first element(If you just use driver.findElement). Because all of the 3 input elements meet your condition 'or' and it gives you the first one.
6 Contains attribute
<html>
<body>
<div>
<form>
<input id="1" type="submit" />
<input id="2" foo="bar" daddy="dog"/>
<input id="3" type="submit" foo="bar"/>
</form>
</div>
</body>
<html>
To get the second input
xpath="//input[@daddy]"
Because only the second one has attribute 'daddy'
7 Inner searching
<html>
<body>
<div>
<form>
<input id="input1" daddy="dog" />
<input id="input2" daddy="pig"/>
</form>
</div>
<div>
<form>
<input id="input3" daddy="dog" />
<input id="input4" daddy="apple"/>
</form>
</div>
</body>
<html>
To get the second div
xpath="//div[.//input[@daddy='dog'] and .//input[@daddy='apple']]"
Overall those are all I can work out for now. Hope it helps.
这篇关于如何通过除“类"之外的属性直接找到 WebElements和“名称"(例如“标题")的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
相关文章
- 如何检测 32 位 int 上的整数溢出?How can I detect integer overflow on 32 bits int?(如何检测 32 位 int 上的整数溢出?)
- return 语句之前的局部变量,这有关系吗?Local variables before return statements, does it matter?(return 语句之前的局部变量,这有关系吗?)
- 如何将整数转换为整数?How to convert Integer to int?(如何将整数转换为整数?)
- 如何在给定范围内创建一个随机打乱数字的 intHow do I create an int array with randomly shuffled numbers in a given range(如何在给定范围内创建一个随机打乱数字的 int 数组)
- java的行为不一致==Inconsistent behavior on java#39;s ==(java的行为不一致==)
- 为什么 Java 能够将 0xff000000 存储为 int?Why is Java able to store 0xff000000 as an int?(为什么 Java 能够将 0xff000000 存储为 int?)
最新文章
- 将选项传递给 chrome 驱动程序 selenium
- 如何使用 Selenium WebDriver 在 Chrome 中激活 AdBlocke
- org.openqa.selenium.WebDriverException: disconnected: not con
- chromedriver 在前台运行的 windows jenkins slave 上失败
- 通过 Selenium Chromedriver 自动授予对 Chrome 48 中视频
- RemoteWebDriver 抛出“org.openqa.selenium.SessionNotCreate
- 如何隐藏警告“此类文件可能会损害您的计算机
- 如何使用 Java 获取 chromedriver 进程 PID?
- java.lang.IllegalStateException:驱动程序可执行文件不存
- sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native