当前位置: 首页 > 知识库问答 >
问题:

Selenium的预期条件-等待xpath可用-我不知道如何在我的代码中键入它[duplicate]

景哲
2023-03-14

我是Scott,对python还是有点陌生,仍在试图弄清楚它是如何工作的。。。英雄联盟

我有一个脚本,可以登录到一个网站进行工作,在几个对象上进行一些单击,然后根据单击的设置提取一个报告

我遇到的问题是,有时服务器很忙,所以出现问题需要不同的时间。。。在激活下拉菜单之前,某些项目无法单击。。。所以我需要脚本来等待每个对象的xpath变得可用

我不明白显式等待的用法

目前代码是UGLY与我的time.sleep和其他各种东西的坏用法。.

代码包括在下面。。。但是这里有一个我需要它等待的例子,我需要插入显式等待,等待元素变得可用

提前感谢您的帮助,在本论坛的帮助下,我已经解决了脚本中的许多其他问题

#Close City Arrow
print('Close City')
loc_arrow2 = (browser.find_element_by_xpath('//*[@id="rddlLocation_Arrow"]'))
loc_arrow2.click()

time.sleep(2)

#Category Button
print ('Category Button')
CategoryRadioBtn = browser.find_element_by_id('rbnSearchCategory')
CategoryRadioBtn.click()
WebDriverWait(browser,20)

time.sleep(2)

#L1 Set to 3d_blah_blah_blah
print('L1 Set to 3d_blah_blah_blah')

loc_L1 = (browser.find_element_by_xpath('//*[@id="ctlCategorySelect1_ddlCategory1_Arrow"]'))
loc_L1.click()


time.sleep(2)

loc_L2 = (browser.find_element_by_xpath('//*[@id="ctlCategorySelect1_ddlCategory1_Input"]'))
loc_L2.clear()
loc_L2.send_keys('3')
loc_L2.send_keys(u'\ue007')

共有1个答案

龙飞文
2023-03-14

让我们以下面的行作为示例来解释EC(期望条件)。

loc_L1 = (browser.find_element_by_xpath('//*[@id="ctlCategorySelect1_ddlCategory1_Arrow"]'))

你必须添加下面的导入工作显式等待使用EC.

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

这里是如何编写显式等待的

WebDriverWait(driver,waitTimeInSec).until(EC.presence_of_element_located((By.strategy,"xpath_goes_here")))
# Below is the example
loc_L1 = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="ctlCategorySelect1_ddlCategory1_Arrow"]')))
 # if you want to wait for the element to be clickable then use below.
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="ctlCategorySelect1_ddlCategory1_Arrow"]')))

如果您得到elementnotinteractiable异常,请使用js单击,如下所示。

driver.execute_script("arguments[0].click()",loc_L1)
 类似资料:
  • Selenium提供了显式的等待功能来处理(例如)当您想要对尚未可单击的元素执行操作时的情况。 语法如下: 这告诉程序等待,直到某个元素(通过其ID定位)可以单击。 element_to_be_clickable()调用内部函数读取指定的参数。在这种情况下,它在DOM中搜索与ID:相对应的元素。 但是,我不能直接将对象传递到函数中,因为它在内部调用中失败。 在处理本身时,有没有一种方法可以使用这些

  • 问题内容: 我在弄清楚如何使用Selenium的wait函数时遇到了麻烦。我正在尝试做的是检查元素是否存在以及是否存在,然后将打印一条语句。这是我的代码: 当前代码给我以下错误: 问题答案: 预期条件期望将元组传递进来,其中第一项是定位器的类型(常量),第二项是定位器的值: 请注意,您的情况会更简单:

  • 需要一些帮助。 我正试图登录Flipkart并通过selenium购买第一部Iphone。 然而,我被困在下面提到的页面 https://www.flipkart.com/apple-iphone-6.../p/itmen2yynt6bz3gg... 我尝试单击比较复选框、16GB按钮、立即购买按钮和添加到购物车按钮,但所有操作都无法定位错误。 任何帮助都将不胜感激。 提前感谢 我使用了隐式等待和

  • 我已经调试这段代码好几个小时了,试图让输出正确无误。它在早期工作,但输出中存在逻辑错误,因此我进入并在输出函数中添加了循环和一个额外参数。 现在g给我以下错误: Student.cpp:在成员函数“void Student::input data(std::string,int,STD::string 如何修复此代码?:

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 输入三角形的三条边

  • 问题内容: 以下代码取自的JavaDoc: 想象一下, 消费者 和 生产者这 两个线程,一个正在使用,一个在单个实例上。 假设 消费者 先运行,然后锁定,然后循环运行。 现在, 生产者 如何才能通过锁定已由 消费者 持有的来进入方法? 我在这里想念什么?是线程正在等待其条件之一时“临时释放”吗?锁的重新 进入 到底意味着什么? 问题答案: 双方并允许一个线程等待的时候,另一个线程可以获得锁放弃锁。