Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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 checkbox click()有时会单击提交按钮而不是取消选中框_Python_Selenium - Fatal编程技术网

Selenium python checkbox click()有时会单击提交按钮而不是取消选中框

Selenium python checkbox click()有时会单击提交按钮而不是取消选中框,python,selenium,Python,Selenium,请容忍我,因为这是我的第一个堆栈溢出问题。问题是,当我一步一步地浏览代码时,它按照预期的方式工作——复选框被清除,可变优惠券的值被发送到现在可用的文本框中。但是,当我运行代码时,下面代码的第2行会导致浏览器有效地单击“保存并提交”按钮。此外,无论是单步执行还是运行代码,下面代码上方复选框的类似代码行都会起作用。注意:我使用的是Firefox 下面是我的代码: IRbox = browser.find_element(By.XPATH, "//tr[@class='interest_rate']/

请容忍我,因为这是我的第一个堆栈溢出问题。问题是,当我一步一步地浏览代码时,它按照预期的方式工作——复选框被清除,可变优惠券的值被发送到现在可用的文本框中。但是,当我运行代码时,下面代码的第2行会导致浏览器有效地单击“保存并提交”按钮。此外,无论是单步执行还是运行代码,下面代码上方复选框的类似代码行都会起作用。注意:我使用的是Firefox

下面是我的代码:

IRbox = browser.find_element(By.XPATH, "//tr[@class='interest_rate']//td[@class='edit']//span//input[@type='checkbox']")
if IRbox.is_selected() == True: IRbox.click()
wait.until(EC.presence_of_element_located((By.ID, 'ctl00_ContentPlaceHolder1_tbInterestRate')))
browser.find_element(By.ID, 'ctl00_ContentPlaceHolder1_tbInterestRate').send_keys(coupon)

在每行代码后打印测试语句,直到第2行之后。错误语句出现在执行第2行之后,因为代码正在上一页上查找元素:

Traceback (most recent call last):
File "C:\Users\sakiyama\AppData\Local\Programs\Python\Python36-32\MyPythonScripts\indtest - selenium.py", line 490, in <module>
    wait.until(EC.presence_of_element_located((By.ID, 'ctl00_ContentPlaceHolder1_tbInterestRate')))
  File "C:\Users\sakiyama\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 
回溯(最近一次呼叫最后一次):
文件“C:\Users\sakiyama\AppData\Local\Programs\Python\Python36-32\MyPythonScripts\indtest-selenium.py”,第490行,在
等待.until(EC.presence_of_element_located((By.ID,'ctl00_ContentPlaceHolder1_tbInterestRate'))
文件“C:\Users\sakiyama\AppData\Local\Programs\Python\Python36-32\lib\site packages\selenium\webdriver\support\wait.py”,第80行,直到
引发TimeoutException(消息、屏幕、堆栈跟踪)
selenium.common.Exception.TimeoutException:消息:
我在脚本中尝试的内容(都有相同的结果):

  • 寻找元素的不同组合
  • 利用睡眠
  • 使用等待代替睡眠
  • 保存/重新加载/返回该页面的不同组合
  • 注释掉IRbox代码行(仍然提交,而不是在页面下方的类似代码行中选中/取消选中)
  • 注释掉“提交”代码
适用于IRbox上的代码的HTML:

<input id="ctl00_ContentPlaceHolder1_tbIssuePrice_unknown" name="price_at_issue_unknown" value="1" checked="checked" onclick="updateUnknown(this,'ctl00_ContentPlaceHolder1_tbIssuePrice','');" type="checkbox">

IRbox上的HTML代码不起作用(尽管我怀疑这是一个JS问题):



你让线程休眠了多长时间?这听起来像是在单步执行时元素还没有完成加载?我尝试了5秒钟,在此之前,我在其他复选框中插入了1秒的sleep语句(在这之前都可以正常工作)。根据一位同事的建议,我将sleep语句改为waits,但这并没有解决问题。我注意到,只要单击了IRbox(或者发送了单击它的命令),页面就会立即转到提交的页面。你把线程放在哪里了?您确定在执行任何selenium代码之前就将其放在了最开始的位置吗?Dom元素需要时间才能获取RenderId,它在browser.get()上休眠,并且在它前面的四个复选框之后至少休眠四次,此外还要在IRbox语句之前添加5秒的休眠
<input id="ctl00_ContentPlaceHolder1_tbIssuePrice_unknown" name="price_at_issue_unknown" value="1" checked="checked" onclick="updateUnknown(this,'ctl00_ContentPlaceHolder1_tbIssuePrice','');" type="checkbox">
<input id="ctl00_ContentPlaceHolder1_tbInterestRate_unknown" name="interest_rate_unknown" value="1" checked="checked" onclick="updateUnknown(this,'ctl00_ContentPlaceHolder1_tbInterestRate','');" type="checkbox">