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
Python 等待父标记是否确保使用Selenium完全加载子标记?_Python_Selenium_Selenium Webdriver_Webdriverwait_Expected Condition - Fatal编程技术网

Python 等待父标记是否确保使用Selenium完全加载子标记?

Python 等待父标记是否确保使用Selenium完全加载子标记?,python,selenium,selenium-webdriver,webdriverwait,expected-condition,Python,Selenium,Selenium Webdriver,Webdriverwait,Expected Condition,如果在Selenium上使用WebDriverWait函数时等待加载父标记,可以确保加载了子标记吗 代码示例: WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until( EC.presence_of_element_located(By.ID, "test") ) HTML: 这个标签也装了吗? 在这种情况下,当测试标签加载完成时,我想知道h1标签的标签是否也能保证加载 如果没有子标记

如果在Selenium上使用WebDriverWait函数时等待加载父标记,可以确保加载了子标记吗

代码示例:

WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until(
            EC.presence_of_element_located(By.ID, "test")
)
HTML:


这个标签也装了吗?
在这种情况下,当测试标签加载完成时,我想知道h1标签的标签是否也能保证加载

如果没有子标记(示例代码中的h1标记) 换句话说,有些页面具有称为h1的子标记,有些页面具有相同的结构,但没有称为h1的子标记

我不喜欢延迟,尽管我知道如果我将WebDriverWait用于我的子标签,那么就不会有标签。 因此,就像上面的问题一样,我要等待父标记的加载,然后处理它。

正如我所想,如果将WebDriverWait应用于父标记不能保证加载子标记,我如何实现我想要的目标?


谢谢你的帮助。

更多的信息会帮助我们构建一个更规范的答案。但是,就像每个测试基于唯一的测试目标一样,每个测试的目标元素也必须是唯一的

因此,如果您的目标元素是
,那么您的测试应该基于
,如下所示:

WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until(
        EC.presence_of_element_located((By.ID, "test"))
)
WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until(
        EC.presence_of_element_located((By.XPATH, "//div[@id='test']/h1[text()='Is this tag also loaded?']"))
)
在这种情况下,您的目标元素是
,您的测试应基于
,如下所示:

WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until(
        EC.presence_of_element_located((By.ID, "test"))
)
WebDriverWait(self.web_driver, WEB_DRIVER_WAIT_TIME).until(
        EC.presence_of_element_located((By.XPATH, "//div[@id='test']/h1[text()='Is this tag also loaded?']"))
)

谢谢你的回复。根据你的回答,我更详细地修改了问题。根据您所说的,听起来您需要指向一个子标记,确切地说是h1,以获得负载的保证,对吗?如果这是正确的,那么实现我期望的目标的最佳方式是什么?如果这是正确的,那么实现我所期望的目标的最佳方法是什么,如问题中所述?当存在依赖关系时,需要考虑
父标记和
子标记。为了使定位器保持最佳状态,
的xpath应该以
//按钮
开始,而不是
//html//body//div//按钮
很抱歉打扰您。我理解您所说的应该是指等待装载的标签。如果整个代码具有相同的结构和父标记,但具有不同的子标记,也就是说,如果使用WebDriverWait,如果一个页面有按钮,而另一个页面没有按钮,那么如果按钮不存在,则会有延迟。但是,我希望得到一个保证,即当按钮就位时,加载已经完成。我该怎么办?@Jay flow如果在这种情况下一页有按钮,而另一页没有按钮,请使用
try catch{}
,这样一旦出现错误,您的程序就不会崩溃/关闭,其余的测试也会执行。@Jay flow您关心的延迟是您自己的
WebDriverWait
代码造成的延迟。这意味着您必须更改测试策略/测试体系结构,并且可能无法为所有页面派生通用代码,因为一个页面有一个按钮,而另一个页面没有按钮。