Selenium Automation无法在Way2Automation网站上输入用户名

时间:2017-04-26 12:56:54

标签: c# selenium automation webautomation

我正在尝试为此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

之类的错误

任何人都可以帮我解决这个问题吗?

6 个答案:

答案 0 :(得分:2)

使用 xpath定位器

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

xpath的说明: - 使用name标记的<input>属性。

Suggesstion: - 使用absolute xpath而不是relative xpath

注意: - 在访问此网络元素之前提供几秒钟的等待,因此您的驱动程序可能会找到该网络元素。因此,您不会收到类似element not visible

的错误

答案 1 :(得分:1)

在xpath下面使用:

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

答案 2 :(得分:0)

该网站有2个表单,其中包含id load_form,因此您将获得第一个不可见的表单,因为它是登录表单。你想要第二个是寄存器形式。

您可以使用选择器抓取注册页面上存在的其中一个字段,然后向上移动到其父窗体,并获取要填充的所有后代字段集。

答案 3 :(得分:0)

以下是xpath您可以用来传递文字&#34; Dev&#34;进入标有&#34;名称&#34;。

的字段

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

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

答案 4 :(得分:0)

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

#load_box input[name='username']

注意区分两个INPUT的load_box ID。

答案 5 :(得分:0)

way2automation站点上的Ajax弹出窗口是一个棘手的问题,因为如果您通过名称<tr> <td> </td> <td> </td> </tr> 查找用户名字段,则最终将包含2个元素-一个来自注册弹出窗口的用户名,一个来自singin弹出窗口的用户名。为了避免这种情况,您必须明确提及正确的元素。这可以通过以下代码完成:

By.name("username")

正如您在代码中看到的那样,我正在使用登录弹出窗口 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"); 的{​​{1}}。我使用过class,但是概念是相同的-您必须通过css选择器(其中包含弹出式类)来引用.ajaxlogin元素:Java