如何点击Selenium中的复选框



我正试图单击此复选框并从下拉菜单中选择一个选项。下拉对象的值为"0";打开";并且下拉ID是"0";状态检查"。相关HTML

<input type="checkbox" id="StatusCheck" name="StatusCheck"> ==$

和下拉HTML

<select name="Status" class="input" style="font-size:10px;">
<option value="ALL">All Open and Closed Service Requests</option>
<option selected="" value="OPEN">All Open Service Requests</option>
<option value="CLOSED">All Closed Service Requests</option>
<option value="SCHEDULED">Only Scheduled Service Requests</option>
<option value="ASSIGNED">Only Assigned Service Requests</option>
<option value="DISPATCHED">Only Dispatched Service Requests</option>
<option value="IN_PROGRESS">Only In-Progress Service Requests</option>
<option value="BACKORDER">Only Backorder Service Requests</option>
<option value="SUSPENDED">Only Suspended Service Requests</option>
<option value="COMPLETED">Only Completed Service Requests</option>
<option value="CANCELLED">Only Cancelled Service Requests</option>
</select>

然后我的脚本如下

#Check display box
driver.implicitly_wait(5)
driver.find_element_by_ID("StatusCheck").click()
#Select All Open and Closed Service Requests from dropdown
driver.implicitly_wait(5)
dropdownSelector = Select(driver.find_element_by_name("Status"))
dropdownSelector.select_by_value("OPEN")

错误如下

Traceback (most recent call last):
File "C:UserstmartinAppDataLocalTempATMStatusScript.py1main.py", line 40, in <module>
driver.find_element_by_id("StatusCheck").click()
File "C:UserstmartinAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "C:UserstmartinAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:UserstmartinAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:UserstmartinAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="StatusCheck"]"}
(Session info: chrome=89.0.4389.90)

编辑:正如JeffC所指出的,这是在iFrame中。iFrame HTML如下所示:

<iframe id="myframe" style="background-color: rgb(255, 255, 255); width: 100%; position: absolute; height: 829px; display: block;" src="/f5-w-687474703a2f2f6e617973636c75737465722e6e63722e636f6d3a3830$$/MSL/jsp/MSLReDirect.jsp?ep=GIMV"></iframe>

如果这很重要的话,代码中还有另一个框架,那就是:

<frame src="f5-h-$$/GIM/GIM?TARGET_PROCESSOR=com.ncr.gim.processor.OPFProcessor&amp;REQ=GIMA&amp;pageAccess=&amp;LAZ=Tue Mar 30 08:46:58 EDT 2021" name="GIMA" frameborder="0" border="0" scrolling="auto">

我试过了,但还是没用。想知道我是否需要以不同于iFrame的方式处理帧,或者我是否可以忽略它?

driver.implicitly_wait(10)
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.find_element_by_css_selector("body > table > tbody > tr:nth-child(1) > td > a").click()
driver.switch_to.default_content()
#Check display box
driver.switch_to.frame(driver.find_element_by_id("myframe"))
#driver.switch_to.frame(driver.find_element_by_name("GIMA"))
driver.find_element_by_id("StatusCheck").click()
driver.switch_to.default_content()
#Select All Open and Closed Service Requests from dropdown
el = WebDriverWait(driver, 15) 
.until(EC.presence_of_element_located((By.XPATH, "//select[@name='Status' and @class='input']")))
dropdownSelector = Select(el)
dropdownSelector.select_by_value("OPEN")

您收到的错误是selenium.com.mon.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{quot;方法":"css选择器"选择器":">

它似乎与下拉列表无关。执行findElement时,复选框似乎不存在(对象未初始化(。试着在编写代码之前使用长时间睡眠,并手动查看开发工具。如果我是对的,您将无法手动定位对象。

尝试一下,可能会有所帮助:

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

el = WebDriverWait(driver, 15)
.until(EC.visibility_of_element_located((By.XPATH, "//select[@name='Status' and @class='input']")))
dropdownSelector = Select(el)
dropdownSelector.select_by_value("OPEN")

最新更新