【问题标题】:Selenium Automation unable to enter username in Way2Automation websiteSelenium Automation 无法在 Way2Automation 网站中输入用户名
【发布时间】:2017-09-23 21:33:13
【问题描述】:

我正在尝试注册这个site

注册页面在弹出页面内。

HTML 代码:

<fieldset>
<label>Username:</label>
<input name="username" required="" type="text"/>
</fieldset>

当我尝试使用下面的代码查找元素时,找不到元素。

driver.FindElement(By.XPath(".//*[@id='load_form']/fieldset[1]/input")).SendKeys("Kal");

我也尝试过使用 CssSelector,但遇到了同样的问题。

driver.FindElement(By.CssSelector("div#load_box form#load_form input[name=username]")).SendKeys("kal");

当我执行上面的代码时,我得到了一个类似element not visible的错误

谁能帮我解决这个问题?

【问题讨论】:

  • driver.FindElement(By.Xpath(".//input[@name='name']")).SendKeys("kal"); 这行得通

标签: c# selenium automation webautomation


【解决方案1】:

使用 xpath locator

试试下面的代码
driver.FindElement(By.XPath("//input[@name='name']")).SendKeys("Kal");

xpath的解释:-使用&lt;input&gt;标签的name属性。

建议:-不要使用absolute xpath,而是使用relative xpath

注意:- 在到达此网页元素之前,请等待几秒钟,以便您的驱动程序能够找到该网页元素。所以,你不会得到像element not visible这样的错误

【讨论】:

    【解决方案2】:

    在xpath下面使用:

    //*[@id='load_form']/fieldset[6]/input[@name='username']
    

    【讨论】:

      【解决方案3】:

      该站点有 2 个 ID 为 load_form 的表单,因此您将获得第一个不可见的表单,因为它是登录表单。第二个是注册表单。

      您可以使用选择器来抓取注册页面上存在的字段之一,然后向上移动到它的父表单并获取所有作为字段集的后代来填写。

      【讨论】:

        【解决方案4】:

        这是xpath,您可以使用该xpath 将文本“Dev”传递到标有“名称”的字段中。

        driver.findElement(By.xpath("//div[@class='fancybox-overlay fancybox-overlay-fixed']//form[@id='load_form']/fieldset/input[@name='name']")).sendKeys("Dev");

        如果这回答了你的问题,请告诉我。

        【讨论】:

          【解决方案5】:

          问题是有两个用户名输入字段。我通常处理这个问题的方法是找到我想要的元素的父元素,它有一个 ID 或可以区分这两个元素的唯一元素。在这种情况下,您可以使用简单的 CSS 选择器,

          #load_box input[name='username']
          

          注意区分两个 INPUT 的 load_box ID。

          【讨论】:

            【解决方案6】:

            way2automation 网站上的 Ajax 弹出窗口是一个棘手的问题,因为如果您按名称 By.name("username") 查找用户名字段,您最终会得到 2 个元素 - 一个来自注册弹出窗口的用户名,一个来自 singin 弹出窗口。为避免这种情况,您必须明确提及正确的元素。这可以通过以下代码完成:

                webDriver.get("http://way2automation.com/way2auto_jquery/index.php");
                WebDriverWait wait = new WebDriverWait(webDriver, 10);
                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[href='#login'"))).click();
                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".ajaxlogin input[name='username']"))).sendKeys("my_username");
            

            正如您在代码中看到的那样,我正在使用登录弹出窗口的class - .ajaxlogin。我用过Java,但概念是一样的——你必须通过包含弹出类的css选择器引用username元素:By.cssSelector(".ajaxlogin input[name='username']")

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-15
              • 1970-01-01
              • 1970-01-01
              • 2017-05-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-23
              相关资源
              最近更新 更多