不时出现“找不到元素”问题

Posted

技术标签:

【中文标题】不时出现“找不到元素”问题【英文标题】:"Element not found" issue occurred from time to time 【发布时间】:2022-01-01 14:12:42 【问题描述】:

我写了一个代码,它有 4 个区域,我的代码有点长。当我一次尝试编译所有 4 个区域时,有时代码可以正常工作,但有时不能正常工作,并显示在错误下方;

找不到定位器为“xpath=//input[@id='submit3']”的元素。

这是与我的问题相关的代码部分,

    click element  xpath://html/body/app-root/div[1]/app-sidebar/div/ul/li[5]/a/p
    sleep  10s
   
    input text   $LOCATOR_Card_Number     $Card_Number
    Sleep  1s
    input text   $LOCATOR_code    $code
    
    IF    $Card_Number != 111111
            sleep  2s
            Click Button     xpath=//input[@id='submit3']
            click element  xpath://html/body/div/div[2]/table[3]/tbody/tr[2]/td/center/table/tbody/tr/td[1]/form/small/input

            Sleep  2s
            alert should be present

            #Click ok button
            click element   xpath=//form/input
            Sleep    25s
            
         ELSE IF    $code != 10
            sleep  2s
            Click Button     xpath=//input[@id='submit3']

            Alert Should Be Present       The value entered is incorrect: 'code'   DISMISS    1s
            sleep  20s
            click element  xpath://html/body/div/div[2]/table[2]/tbody/tr[2]/td/center/table/tbody/tr/td[2]/form/small/input

            Sleep  2s
            alert should be present

如果我只编译一个区域(通过评论其他三个区域)它工作正常。否则,大多数情况下,它会显示我前面提到的错误。我想一次编译整个代码。

而且有时,以前工作的 XPath 现在不能工作了。所以,我必须多次找到那些 Xpath。

我搜索了这件事以找到解决方案,但我做不到。 所以,我想知道上述问题的原因,并需要您的建议和解决方案来解决这些问题。

【问题讨论】:

您好,请阅读 minimal reproducible example 和 tour 并相应地编辑您的帖子以接收和适当的答案 谢谢你的建议,我已经编辑好了。 您的代码中有很多睡眠。看起来应用程序很慢,有时测试有点太快了。我建议您将 sleep 关键字替换为 Wait Until Page Contains Element 或类似的。 【参考方案1】:

首先你应该使用相对的 xpaths 和 selenium 库关键字你可以实现动态等待。 试试下面的代码,确保所有 xpath 都是正确的,并在开发工具中突出显示。 您还可以删除所有硬编码的等待。

    $sometimeout=    set Variable   30
    click element  xpath://app-sidebar/div/ul/li[5]/a/p
    Wait Until Element Is Visible  $LOCATOR_Card_Number  $sometimeout
   
    input text   $LOCATOR_Card_Number     $Card_Number
    Sleep  1s
    input text   $LOCATOR_code    $code
    
    IF    $Card_Number != 111111
            sleep  2s
            Click Button     xpath=//input[@id='submit3']
            Wait Until Page Contains Element    ///table[3]/tbody/tr[2]/td/center/table/tbody/tr/td[1]/form/small/input
            click element  xpath:///table[3]/tbody/tr[2]/td/center/table/tbody/tr/td[1]/form/small/input

            Sleep  2s
            alert should be present

            #Click ok button
            click element   xpath=//form/input
            Sleep    25s
            
         ELSE IF    $code != 10
            sleep  2s
            Click Button     xpath=//input[@id='submit3']

            Alert Should Be Present       The value entered is incorrect: 'code'   DISMISS    1s
            Wait Until Page Contains Element    //table[2]/tbody/tr[2]/td/center/table/tbody/tr/td[2]/form/small/input    $sometimeout
            click element  xpath://table[2]/tbody/tr[2]/td/center/table/tbody/tr/td[2]/form/small/input

            Sleep  2s
            alert should be present

为了进一步调查,您可以通过下面提到的链接 https://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Wait%20Until%20Page%20Contains%20Element

【讨论】:

以上是关于不时出现“找不到元素”问题的主要内容,如果未能解决你的问题,请参考以下文章

IPhone连接Safari调试找不到元素 存储空间等入口

[Vue 警告]:找不到元素:#app - Vue.js 2

让 Selenium 单击 Instagram 关注者按钮会引发错误“找不到元素”

为啥 jQuery 或 getElementById 等 DOM 方法找不到元素?

为啥 jQuery 或 getElementById 等 DOM 方法找不到元素?

为啥 jQuery 或 getElementById 等 DOM 方法找不到元素?