无法通过xpath单击网页上的元素,并且没有引发错误

2024-04-26 22:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图测试一个网站的表单提交页面。“提交”按钮具有以下HTML:

<input id="ctl00_PlaceHolderMain_SubmitButton" class="SubmitButton" type="submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$PlaceHolderMain$SubmitButton", "", true, "", "", false, false))" value="Submit" name="ctl00$PlaceHolderMain$SubmitButton"/>

我已经找到它的id和运行下面的代码在我的测试。由于某些原因,没有抛出错误。测试刚刚通过,没有点击按钮。我错过了什么?你知道吗

self.click(10, 
           "id", 
           OigHotlinePageMap['SubmitButtonId']
           )

我将click()方法存储在页面对象中:

def wait_until_element_clickable(self, waitTime, locatorMode, Locator):
     element = None
     if   locatorMode == LocatorMode.ID:
          element = WebDriverWait(self.driver, waitTime).\
                  until(EC.element_to_be_clickable((By.ID, Locator)))
     elif locatorMode == LocatorMode.NAME:
          element = WebDriverWait(self.driver, waitTime).\
                  until(EC.element_to_be_clickable((By.NAME, Locator)))
     elif locatorMode == LocatorMode.XPATH:
          element = WebDriverWait(self.driver, waitTime).\
                  until(EC.element_to_be_clickable((By.XPATH, Locator)))
     elif locatorMode == LocatorMode.CSS_SELECTOR:
          element = WebDriverWait(self.driver, waitTime).\
                  until(EC.element_to_be_clickable((By.CSS_SELECTOR, Locator)))
     else:
         raise Exception("Unsupported locator strategy.")
     return element

 def click(self, waitTime, locatorMode, Locator):
    self.wait_until_element_clickable(waitTime, locatorMode, Locator).click()

我将定位器存储在UI地图字典中:

OigHotlinePageMap = dict(SubmitButtonId = "ctl00_PlaceHolderMain_SubmitButton"
)

Tags: selfdriverelementuntilclickeclocatorclickable
2条回答

因此HTML中的onclick()没有启动,因为网站上的一个单选按钮没有被选中。我可以点击提交按钮后,选择所需的单选按钮。你知道吗

一个常规的click()方法通过CSS选择器工作。你知道吗

尝试改用类名,它将起作用:

driver.find_element(By.CLASS_NAME, 'SubmitButton')

为此,您应在代码中引入以下内容:

if locatorMode == LocatorMode.CLASS_NAME
element = WebDriverWait(self.driver, waitTime).\
                  until(EC.element_to_be_clickable((By.CLASS_NAME, Locator)))

然后将其用作:

self.click(10, "class", OigHotlinePageMap['SubmitButtonClass'])

现在,您可以将词典更改为:

OigHotlinePageMap = dict(SubmitButtonClass = "SubmitButton")

相关问题 更多 >