我有一个自动化聊天应用程序的任务。我正在使用Webdriver和Java。两个不同的用户将同时在两个不同的浏览器上登录并启动聊天。如果有人能给我一些建议,我将不胜感激。
答案 0 :(得分:7)
您有两个担忧需要担心。第一个是确保每个用户都有不同的浏览器,第二个是同时运行这两个用户。有几种不同的方法可以做到,所以我会分别看一下。
第一部分,打开两个浏览器,并不太难;您可以为每个对象创建一个单独的WebDriver对象。但是,您可能必须使用两种不同的浏览器来避免任何类型的会话共享问题:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
WebDriver user_1 = new FirefoxDriver();
WebDriver user_2 = new ChromeDriver();
如果您需要打开同一浏览器的两个实例,最好的选择是使用Selenium Grid来托管您想要的浏览器,然后创建与它们的远程连接:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
URL server = new URL("http://your-server-location.com");
WebDriver driver = new RemoteWebDriver(server, capabilities);
如果您不想设置自己的Selenium Grid,可以使用Sauce Labs之类的服务为您管理(并为您提供添加额外测试平台资源的简便方法)
听起来你可以让一个测试类依次针对相关的Webdriver执行每个操作。使用Page Object Model之类的东西来提供代表您的页面的服务对象,您也可以传递WebDriver的实例。然后,您可以更流畅地表达您的测试逻辑,而不是处理不同的Web驱动程序和元素:
public class Chatsite{
public WebDriver driver;
private WebElement talkbox;
private WebElement chatlog;
private WebElement sendbutton;
public Chatsite(WebDriver passed_in_driver){
driver = passed_in_driver;
talkbox = driver.find_element("name", "talkbox");
sendbutton = driver.find_element("name", "send");
chatlog = driver.find_element("name", "chatlog");
driver.get("http://www.yoursite.com");
}
public void say(String string_to_type){
talkbox.send_keys(string_to_type);
sendbutton.click();
}
public void sees_in_the_chatlog(String expected_content){
String current_chat_text = chatlog.getText();
assertTrue("Couldn't find content", current_chat_text.contains(expected_content));
}
}
#Now, in your tests
#Name your users so it's easier to keep track of them
Chatsite david = Chatsite.new(user_1);
Chatsite susan = Chatsite.new(user_2);
david.say("Isn't it a fine day?");
susan.sees_in_the_chatlog("Isn't it a fine day?");
susan.say("If you're going to talk about the weather I'm failing this test case");
## And so on in that fashion
答案 1 :(得分:1)
如果您不必在同一浏览器上测试它,请参阅此文章,了解如何打开多个浏览器窗口进行测试 - How to switch instances in WebDriver。