Selenium - Python - 为什么我要使用By类? [重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我一直在寻找过去几天试图找出在Selenium for Python中使用By类的优势。它似乎返回一个字符串元组。

使用它比标准Selenium方式有什么好处?

例如:By.ID, 'password' vs find_element_by_id('password')

为了用Selenium做事,我需要WebElements;所以我不知道为什么我想要使用By类。任何人都可以对此有所了解吗?

python selenium automation
2个回答
0
投票

使用By的主要优点是它具有高度可重用性。

例如,如果您在网站的提交按钮的名称和类型中找到一致性,如下所示:

<input value="Submit" name="ok" type="submit">

您可以在不同页面上创建By对象并使用driver.findElement,而无需担心使用哪个方法,find_element_by_id或find_element_by_xpath:

subBtnQuery = By.xpath("//input[@name='ok'][@type='submit']"
driver.get(first_url)
driver.findElement(subBtnQuery)
driver.get(second_url)
driver.findElement(subBtnQuery)

如果更改了html,您只需编辑By对象。

Further reading

您也可以使用ByChained链接多个Bys。

Extra

正如您所关注的,html ID在现实生活场景中通常不是唯一的。因此,大多数情况下,您希望非常具体地找到要查找的元素,那就是当xpath和css选择器变得方便时。

例如,如果您尝试从html获取谷歌搜索按钮,如下所示:

<input value="Google Search" aria-label="Google Search" name="btnK" type="submit" jsaction="sf.chk">

您可以使用xpath进行高度可靠的查询:

driver.findElement(By.xpath("//input[@name='btnK'][@type='submit']");

或者css选择器:

driver.findElement(By.cssSelector("input[name='btnK'][type='submit']"))

两个查询都做了完全相同的事情,即输入名称为'btnK'并输入'submit'。


-1
投票

ID是您寻找独特/重要元素的时候。 Class可以帮助您找到元素集合。一个类可以包含许多元素,当你最终得到重复的ID和名称时,很有可能。然后首先查找ClassName并尝试使用ID找到元素。这应该工作,因为selenium将查找上述类中的ID。

    WebElement parentE = driver.findElement(By.className("button"));
    WebElement childE = parentE.findElement(By.id("submit"));
    childE.submit();
© www.soinside.com 2019 - 2024. All rights reserved.