我对Java和Selenium很陌生,如果我的问题听起来有点初级,我提前道歉。
我使用:
driverChrome.findElements(By.className("blabla"));
查找以“blabla”作为其类名称的元素,例如:
<span class="blabla" title="the title">...</span>
现在,如果我想通过其他属性查找所有元素呢?类似于:
driverChrome.findElements(By.titleValue("the title"));
这是我当前用于执行此任务的代码:
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;
}
}
}
但它并不快速,也不好用。
您也可以使用CSS定位器来实现这一点。
通过CSS选择器(“span[title='the title']”)
据说CSS选择器速度更快。
我们在实践中介绍了Selenium WebDriver中的一些定位技术:http://selenium-webdriver-in-practice.github.io
可以使用xpath实现
driverChrome.findElement(By.xpath("//*[@yourAttribute='value']"));
例如:
driverChrome.findElement(By.xpath("//*[@title='the title']"));
使用XPath归档元素时有许多方法
<html>
<body>
<div>
<form>
<input id="demo"/>
</form>
</div>
</body>
<html>
获取“输入”标签
xpath="/html/body/div/form/input"
<html>
<body>
<div>
<form>
<input id="demo"/>
</form>
</div>
</body>
<html>
获取“输入”标签
xpath="//input"
<html>
<body>
<div>
<form>
<input id="demo1"/>
<input id="demo2">
</form>
</div>
</body>
<html>
获取输入“demo2”
xpath=“//输入[1]”
<html>
<body>
<div>
<form>
<input id="demo1"/>
<input id="demo2" foo="bar">
</form>
</div>
</body>
<html>
获取输入“demo2”
xpath="//input[@id='demo2']" (equivalent to By.id)
或
xpath="//input[@foo='bar']"
<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>
获取第三个输入
xpath="//input[@type='submit'][@foo='bar']"
或
xpath="//input[@type='submit' and @foo='bar']"
如果使用xpath=“//输入[@type='submit'或@foo='bar]”,您将得到一个数组。你可以按驱动程序获取列表。findElements(By.xpath(xpath))(java)。否则,您将获得第一个元素(如果您只使用driver.findElement)。因为所有3个输入元素都满足条件“or”,它给出了第一个条件。
<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>
来获取第二个输入
xpath="//input[@daddy]"
因为只有第二个有“爸爸”属性
<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>
获得第二个div
xpath="//div[.//input[@daddy='dog'] and .//input[@daddy='apple']]"
总的来说,这些是我现在能解决的全部问题。希望有帮助。
问题内容: 我的网页中有3个单选按钮,如下所示: 在jQuery中,我想在单击这三个按钮中的任何一个时获取所选单选按钮的值。在jQuery中,我们有id(#)和class(。)选择器,但是如果我想按名称查找单选按钮,该怎么办呢? 请告诉我如何解决这个问题。 问题答案: 应该做到这一点,所有这些都在文档中,该文档具有与此类似的示例: 我还应该注意,您在该代码段中有多个相同的ID。这是无效的HTML。
一个球形的空间区域充满了特定分布的更小、不同大小的球体。每个球体都与一些物理特性相关联:位置、半径、质量、速度和ID都表示为1d或3d阵列。我想以一种完全随机的方式洗牌这些球体,这样任何一个球体都会保留它的所有属性,除了它的3d位置数组。我在这里遇到过类似的问题(随机洗牌列,第一列除外),但是,有没有一种简单而快速的python方法可以在不使用DataFrame的情况下做到这一点? 谢谢你的帮助。
问题内容: 我有一些如下所示的元素: 如何向属性值为(零)的元素添加类? 我尝试了许多不同的解决方案,但没有任何效果。一个例子: 任何的想法? 问题答案: 使用属性等于选择器 它在树上起作用 获取当前匹配元素集中每个元素的后代,并通过选择器,jQuery对象或元素进行过滤。
问题内容: python + selenium是否有任何方法可以找到父元素,兄弟元素或子元素,就像 或 或 ? 例如: 我已经尝试过如下操作,但是失败了: 如何 获取输入元素的父级, 然后最终 选择选项 ? 问题答案: 您可以使用xpath 找到一个父元素: 为获得选择的选项制作一个单独的xpath怎么样,像这样:
问题内容: 我有两个域,是一对多关系中的一部分。我想知道如何查询孩子的父母FK吗?贝娄是父母/孩子的伪代码 上级: 儿童: 尽管我没有明确创建FK,但是grails会自行创建MySQL数据库。但是,当我想像这样通过FK查询孩子时: 我收到一个错误:找不到类[class mgr.AlumLanguage]的名称[alumProfileId]的属性 关于如何做到这一点的任何建议? 谢谢杰森 问题答
问题内容: 工作代码1: 工作代码2: 问题答案: 初始选择器的问题是缺少选择器的前面。在告诉XPath来搜索整个HTML树。 这应该可以解决问题: 如果要查找元素的子代,请改用,例如 如果要查找包含 文本 而不是href属性的链接,则可以使用