我们在我们的Web 应用程序中使用这些组件。
在页面上,您可以看到一个包含一些按钮的工具栏。如果您单击任何按钮,则会将日志写入日志栏中。
问题是我无法使用 Selenium IDE 记录此行为。IDE 创建一个命令,但是当我执行该命令时没有任何反应。甚至没有记录错误。
可能是什么问题呢?
我们在我们的Web 应用程序中使用这些组件。
在页面上,您可以看到一个包含一些按钮的工具栏。如果您单击任何按钮,则会将日志写入日志栏中。
问题是我无法使用 Selenium IDE 记录此行为。IDE 创建一个命令,但是当我执行该命令时没有任何反应。甚至没有记录错误。
可能是什么问题呢?
以慢速执行你的脚本
使用 xpath 来识别元素
clickAt | //div[text()='New']
单击新建按钮
我访问了该网站http://www.dhtmlx.com/docs/products/dhtmlxToolbar/samples/01_init/08_events.html
我通过使用 xpath 检查器获得了 xpath,如下所示:
切 -id('toolbarObj')/x:div[5]/x:div[11]/x:div
复制 -id('toolbarObj')/x:div[5]/x:div[12]/x:div
粘贴 -id('toolbarObj')/x:div[5]/x:div[13]/x:div
您可以将修改后的 xpath 用作:
selenium.click("//div[@id='toolbarObj']/div[5]/div[11]/div");//Cut
selenium.click("//div[@id='toolbarObj']/div[5]/div[12]/div");//Copy
selenium.click("//div[@id='toolbarObj']/div[5]/div[13]/div");//Paste
我不知道这会有所帮助,但肯定对我有所帮助
如果您必须输入任何文本,然后单击任何元素或按钮
有两种方法首先使用“ sendKeys
”键入然后“单击”所需的元素将起作用。例如,在flipkart.com
“类型”中不起作用,但在“ sendKeys
”中起作用
其次是使用“类型”然后按回车而不是单击使用“sendKeys”在目标中具有您正在输入的字段并且值必须具有“ ${KEY_ENTER}
”
例如将帮助您更好的 第一种方法:
第二种方法:
幸运的是,两者都为我工作
可能是硒脚本启动得太快了。我猜您使用的组件会为所有按钮生成一堆 HTML。如果脚本启动得太早,可能还没有生成 html。尝试更慢地运行 selenium 脚本。
另外:我认为 selenium 使用 XPath 来获取页面中的 HTML 元素。您确定 selenium 脚本指的是正确的 HTML 节点吗?您可以通过查看 selenium 脚本(它是 XML)并查看它用于按钮的 XPath 选择器来检查这一点。
也可能是 selenium 可能无法在不可点击的目标上触发点击事件(按钮是 div),但我认为情况并非如此。不过你可以试试。
如果您单击 img 本身而不是 div 会怎样?例如:
//img[contains(@src, 'paste')]
当您单击 Selenium IDE 上的“查找”时,它实际上是否突出显示了页面上的某些内容?
这是执行此操作的完整代码:
package riponalwasim.selenium.webdriver.stackoverflow;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class CutCopyPaste {
WebDriver driver;
String baseUrl;
@BeforeClass
public void setUp() throws Exception {
baseUrl = "http://www.dhtmlx.com/docs/products/dhtmlxToolbar/samples/01_init/08_events.html";
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
}
@Test
public void testCutCopyPaste() throws Exception {
driver.findElement(By.xpath("//div[text()='New']")).click();
driver.findElement(By.xpath("//div[@id='toolbarObj']/div[5]/div[11]/div")).click();
driver.findElement(By.xpath("//div[@id='toolbarObj']/div[5]/div[12]/div")).click();
driver.findElement(By.xpath("//div[@id='toolbarObj']/div[5]/div[13]/div")).click();
}
@AfterClass
public void tearDown() throws Exception {
driver.quit();
}
}
IDE 在记录 javascript 已将项目加载到页面时并不完美,因此可能需要手动帮助。
您是否尝试过等待元素加载后再尝试单击它?我可能会建议插入一个 waitForElementPresent 命令,例如 waitForElementPresent | #toolbarObj 在尝试点击之前。
javascript 工作需要超过 1ms 的时间。所以只需添加“暂停 1000”