Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium-Python-为什么要使用By类?_Python_Selenium_Automation - Fatal编程技术网

Selenium-Python-为什么要使用By类?

Selenium-Python-为什么要使用By类?,python,selenium,automation,Python,Selenium,Automation,在过去的几天里,我一直在搜索,试图找出在Selenium for Python中使用By类的优势。它似乎返回一个字符串元组 与标准硒方法相比,使用这种方法有哪些优点 例如:By.ID,'password'vsfind\u element\u By\u ID('password') 为了使用Selenium,我需要WebElements;所以我不知道为什么要使用By类。有人能解释一下吗?ID是指你在寻找一个独特的/重要的元素。类将帮助您查找元素的集合。一个类可以包含许多元素,当您最终得到重复的ID

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

与标准硒方法相比,使用这种方法有哪些优点

例如:
By.ID,'password'
vs
find\u element\u By\u ID('password')


为了使用Selenium,我需要WebElements;所以我不知道为什么要使用
By
类。有人能解释一下吗?

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

    WebElement parentE = driver.findElement(By.className("button"));
    WebElement childE = parentE.findElement(By.id("submit"));
    childE.submit();

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

例如,如果您发现网站的“提交”按钮的名称和类型一致,则如下所示:

<input value="Submit" name="ok" type="submit">
如果更改了html,您只需要编辑By对象

进一步阅读 您还可以将多个BY链接到

额外的 正如您所担心的,html ID在现实生活中通常是非唯一的。所以,大多数情况下,您希望非常具体地查找要查找的元素,这时xpath和css选择器就派上了用场

例如,如果您尝试从html获取google search按钮,如下所示:

<input value="Google Search" aria-label="Google Search" name="btnK" type="submit" jsaction="sf.chk">
或css选择器:

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

这两个查询执行的操作完全相同,即获取名称为“btnK”且类型为“submit”的输入。

如果您有重复的ID,则它不符合良好的HTML,需要解决此问题。如果我想找到元素的集合,我会做
find\u elements\u by\u class\u name
。所以仍然没有明显的理由使用
By
类。我一生都找不到那条线索。从技术上讲,这将是一个重复的线程。非常感谢你
find\u element\u by.*
方法在引擎盖下使用
by
。它们只是一种方便。直接使用
没有任何好处。
driver.findElement(By.xpath("//input[@name='btnK'][@type='submit']");
driver.findElement(By.cssSelector("input[name='btnK'][type='submit']"))