在我的应用程序中,我想访问一个网站,然后执行用户操作。目前正在使用webview,但我认为webdriver将是一种易于使用和正确的方法。
当前代码:
WebView browser = (WebView) view.findViewById(R.id.webview);
browser.getSettings().setJavaScriptEnabled(true);
browser.getSettings().setDomStorageEnabled(true);
browser.getSettings().setUserAgentString(`"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36");`
browser.setWebViewClient(new MyBrowser());
browser.loadUrl("https://myurl.com");
当前代码的问题:很难发送密钥存储或使用Xpath。
我在找什么?使用驱动程序点击网站,然后点击按钮等。伪代码如下:
chat=driver.find_element_by_xpath("/html/somepath")
chat.click()
time.sleep(2)
search=driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/div[1]/span/div/span/div/div[1]/div/label/input")
search.click()
我知道这是可能的使用硒/安。但令人困惑的是,selenium/appium是否也需要一个在单独机器上运行的服务器?我想在没有外部服务器或任何其他应用程序的情况下运行我的应用程序中的所有代码。
我可以添加lib来访问上面显示的api吗?
您可以在不使用任何服务器的情况下使用Selenium
或Appium
。两者都是插件,这意味着它们基本上是开放代码或库。您在本地机器(或电话(上调用这些对象,而不调用在线远程API。
Selenium和Appium有助于在网页上查找元素或在移动应用程序中查找元素。这里绝对不需要服务器或远程机器。
因此,YES,只需添加lib即可访问api
,如上文所示。
硒
基本形式的Selenium不需要任何单独的服务器来运行。Selenium及其广泛的工具和库可以支持同一台机器内web浏览器的自动化(即localhost(。
WebDriver
Selenium的核心是WebDriver,它是一个编写指令集的接口,这些指令集可以在许多浏览器中互换运行,使用每个浏览器对测试自动化的本地支持。这可以通过三个简单的步骤来实现:
- 安装Selenium库
- 安装浏览器驱动程序
- 编写您的第一个Selenium脚本
示例代码块:
System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.amazon.com/");
driver.findElement(By.cssSelector("input.nav-input[value='Go']")).click();
硒网格
但是,Selenium还支持用于扩展浏览器分配的分发服务器。如果您的用例包括在多台机器上并行运行测试的步骤,那么SeleniumGrid将是您的最佳选择
SeleniumGrid允许通过将客户端发送的命令路由到远程浏览器实例,在远程机器(虚拟或真实(上执行WebDriver脚本。它旨在提供一种在多台机器上并行运行测试的简单方法。
SeleniumGrid还允许您在多台机器上并行运行测试,并集中管理不同的浏览器版本和浏览器配置(而不是在每个单独的测试中(。
话虽如此,它确实解决了一部分常见的委派和分发问题,但可能无法管理您的基础设施,也可能不完全适合您的特定需求。
应用程序
同样,Appium是一个开源工具,用于在iOS移动、Android移动和Windows桌面平台上自动化本地、移动web和混合应用程序混合应用程序有一个webview
包装器,它是一个本地控件,可以与web内容进行交互。像Apache Cordova这样的项目可以更容易地使用web技术构建应用程序,然后将这些技术捆绑到本地包装器中,创建一个混合应用程序。
根据您的问题和您对@detectedSelenium提供的答案的回复评论,以下假设适用:
- 您正在测试安卓手机中的浏览器,该浏览器通过运行在Windows机器上的adb服务器连接到Windows机器
- 正在测试的浏览器是Chrome
将硒作为项目的一部分安装:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
基于您的psuedo代码和@detectedSelenium 提供的答案的示例代码块
System.setProperty(“webdriver.chrome.driver”, “C:\path\to\chromedriver.exe”);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption(“androidPackage”, “com.android.chrome”);
// By default if the following option is not applied, selenium will take the 1st available
// node provided by the adb server if multiple android devices are attached
options.setExperimentalOption("androidDeviceSerial", deviceId);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.amazon.com/");
driver.findElement(By.cssSelector("input.nav-input[value='Go']")).click();
deviceId
变量需要包含被测特定设备(即(的adb服务器中作为设备列出的uuid
options.setExperimentalOption("androidDeviceSerial", 95s572sp0478);
此外,您还需要为您的android设备提供正确的Chromedriver。检查设备上安装的Chrome浏览器版本,并从这里下载适用于Windows机器Chromedriver下载的正确驱动程序。然后放入所需的目录中,并将目录路径添加到代码中。