硒中的条件语句(如果元素不存在)

时间:2019-05-11 01:39:57

标签: python python-3.x selenium selenium-webdriver

我要检查

  

def first_page_error:

     

-如果该元素不存在,则“断开”并继续执行脚本

     

-如果元素存在,则刷新页面

     

-如果刷新运行firstPage()后元素不再存在

我将感谢我正在学习python的所有帮助:)

我现在的代码

def first_page_error():
        cap_error = driver.find_element_by_xpath('//*[@id="js-register-with-email"]/div[2]')
        while True:
            try:
                cap_error
            except NoSuchElementException:
                break
            else:
                time.sleep(5)
                driver.refresh()

    def firstPage():
        element = driver.find_element_by_xpath('//*[@id="sign-up-link"]')
        driver.execute_script("arguments[0].click();", element)

        emailInput = driver.find_element_by_xpath('//*[@id="register-email"]')
        emailInput.send_keys(emails[0])

        condInput = driver.find_element_by_xpath('//*[@id="register-terms"]')
        condInput.click()

    firstPage()
    first_page_error()

1 个答案:

答案 0 :(得分:2)

一些反馈点...

  1. 如果要自动执行用户方案,请避免使用JS单击。用户无法单击不可见的元素,被遮盖的元素或不在屏幕上的元素等。Selenium旨在像用户一样操作,并在用户无法单击元素时引发错误。这是好事。它可以帮助您发现问题并像用户一样解决它们。

  2. 首选ID和CSS选择器。它们更快,得到更好的支持,等等。如果您需要更多说明,网络上有很多信息。我将按ID定位的XPath转换为* _by_id()。

  3. 使用driver.find_elements _ *(注意复数,元素S)检查是否存在,并检查集合的len

我会写类似下面的内容。

def first_page_error():
    return len(driver.find_elements_by_xpath('//*[@id="js-register-with-email"]/div[2]')) > 0

def firstPage():
    driver.find_element_by_id('sign-up-link').click()
    driver.find_element_by_id('register-email').send_keys(emails[0])
    driver.find_element_by_id('register-terms').click()

firstPage()
if first_page_error():
    driver.refresh()
    if first_page_error():
        firstPage()
# move on with the script