我正在尝试为此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
任何人都可以帮我解决这个问题吗?
答案 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
>