gpt4 book ai didi

java - 单击 id 定位的元素但结果仍然不正确

转载 作者:行者123 更新时间:2023-12-01 09:22:10 25 4
gpt4 key购买 nike

我正在 Google 翻译页面上测试 Selenium-Webdriver。我想做的是:

  1. 查看输入语言是否已显示
  2. 如果出现,是否会被选中?如果没有选择它。
  3. 如果不存在,请打开更多语言表。选择(单击)表格上的语言。
  4. 查看输出语言是否已呈现
  5. 如果出现,是否会被选中?如果没有选择它。
  6. 如果不存在,请打开更多语言表。选择(单击)表格上的语言。
  7. 最后翻译并检查结果

我对案例 1 没有任何问题:输入和输出语言已经呈现,结果符合预期。但对于情况 2:输出语言尚未呈现并且必须在表格上选择,就会出现问题。 选择的语言不正确(例如,我选择挪威语,但最终会选择萨摩亚语)。 选择输入使用相同的方式进行选择,但根本不返回任何问题

我的代码如下

package TestNG;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class GoogleTranslate {

WebDriver driver;

@BeforeMethod
public void setUp() {
System.setProperty("webdriver.gecko.driver","F:\\path\\geckodriver.exe");
driver=new FirefoxDriver();
}

@Test(priority=0)
public void VietnameseToEnglish() throws InterruptedException {


// Go to google translate
driver.manage().window().maximize();
driver.get("https://translate.google.com/");
Thread.sleep(5000);

// Check if the page is correct
String currentTitle = driver.getTitle();
Assert.assertEquals(currentTitle, "Google Translate");
Thread.sleep(3000);

// Select Vietnamese as input
if (driver.findElements(By.xpath("//div[@id='gt-lang-left']/div[@id='gt-lang-src']/div[@id='gt-sl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='vi']")).size() > 0)
{
WebElement Vi = driver.findElement(By.xpath("//div[@id='gt-lang-left']/div[@id='gt-lang-src']/div[@id='gt-sl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='vi']"));
String isViSelected = Vi.getAttribute("aria-pressed");
if (isViSelected.equals("false"))
{
Vi.click();
}
}
else
{
WebElement allLangSrc = driver.findElement(By.id("gt-sl-gms"));
allLangSrc.click();
WebElement ViSrc = driver.findElement(By.xpath("//div[@id='goog-menuitem-group-7']/div[@id=':2r']/div"));
ViSrc.click();
}

// Select English as output
if (driver.findElements(By.xpath("//div[@id='gt-lang-right']/div[@id='gt-lang-tgt']/div[@id='gt-tl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='en']")).size() > 0)
{

WebElement En = driver.findElement(By.xpath("//div[@id='gt-lang-right']/div[@id='gt-lang-tgt']/div[@id='gt-tl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='en']"));
String isEnSelected = En.getAttribute("aria-pressed");
if (isEnSelected.equals("false"))
{
En.click();
}
}
else
{
WebElement allLangTrg = driver.findElement(By.id("gt-tl-gms"));
allLangTrg.click();
WebElement EnTrg = driver.findElement(By.xpath("//div[@id='goog-menuitem-group-2']/div[@id=':3j']/div"));
EnTrg.click();
}

WebElement Input = driver.findElement(By.id("source-is"));
//Input.clear();
Input.sendKeys("Ga");
WebElement TranslateButton = driver.findElement(By.id("gt-submit"));
TranslateButton.click();
Thread.sleep(3000);

WebElement Output = driver.findElement(By.xpath("//span[@id='result_box']/span"));
String Outtext = Output.getText();
Assert.assertEquals(Outtext, "Chicken");
}

@Test(priority=1)
public void VietnameseToNorg() throws InterruptedException {


// Go to google translate
driver.manage().window().maximize();
driver.get("https://translate.google.com/");
Thread.sleep(5000);

// Check if the page is correct
String currentTitle = driver.getTitle();
Assert.assertEquals(currentTitle, "Google Translate");
Thread.sleep(3000);

// Select Vietnamese as input
if (driver.findElements(By.xpath("//div[@id='gt-lang-left']/div[@id='gt-lang-src']/div[@id='gt-sl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='vi']")).size() > 0)
{
WebElement Vi = driver.findElement(By.xpath("//div[@id='gt-lang-left']/div[@id='gt-lang-src']/div[@id='gt-sl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='vi']"));
String isViSelected = Vi.getAttribute("aria-pressed");
if (isViSelected.equals("false"))
{
Vi.click();
}
}
else
{
WebElement allLangSrc = driver.findElement(By.id("gt-sl-gms"));
allLangSrc.click();
WebElement ViSrc = driver.findElement(By.xpath("//div[@id='goog-menuitem-group-7']/div[@id=':2r']/div"));
ViSrc.click();
}

// Select Norg as output
if (driver.findElements(By.xpath("//div[@id='gt-lang-right']/div[@id='gt-lang-tgt']/div[@id='gt-tl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='no']")).size() > 0)
{

WebElement No = driver.findElement(By.xpath("//div[@id='gt-lang-right']/div[@id='gt-lang-tgt']/div[@id='gt-tl-sugg']/div[contains(@class,'goog-inline-block jfk-button jfk-button-standard') and @value='no']"));
String isNoSelected = No.getAttribute("aria-pressed");
if (isNoSelected.equals("false"))
{
No.click();
}
}
else
{
WebElement allLangTrg = driver.findElement(By.id("gt-tl-gms"));
allLangTrg.click();
WebElement NoTrg = driver.findElement(By.xpath("//div[@id='goog-menuitem-group-5']/div[@id=':52']/div"));
NoTrg.click();
}

WebElement Input = driver.findElement(By.id("source-is"));
//Input.clear();
Input.sendKeys("Sua");
WebElement TranslateButton = driver.findElement(By.id("gt-submit"));
TranslateButton.click();
Thread.sleep(3000);

WebElement Output = driver.findElement(By.xpath("//span[@id='result_box']/span"));
String Outtext = Output.getText();
Assert.assertEquals(Outtext, "Melk");
}

@AfterMethod
public void tearDown(){
driver.close();
driver.quit();
}
}

最佳答案

我会做这样的事情。您应该专注于创建只执行单一操作的函数,以便拥有可以轻松用于各种测试的可重用代码。

这是我的功能

static public String getTranslatedText()
{
new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>()
{
public Boolean apply(WebDriver d)
{
return d.findElement(By.id("result_box")).getText().length() != 0;
}
});
return driver.findElement(By.id("result_box")).getText();
}

static public void setSourceLanguage(String lang)
{
// see if the desired language is already selected
if (!driver.findElement(By.cssSelector("#gt-lang-src div.jfk-button-checked")).getText().equals(lang))
{
// open the Source language dropdown
driver.findElement(By.id("gt-sl-gms")).click();

// select the desired language
driver.findElement(By.xpath("//div[@id='gt-sl-gms-menu']//div[text()='" + lang + "']")).click();
}
}

static public void setTargetLanguage(String lang)
{
// see if the desired language is already selected
if (!driver.findElement(By.cssSelector("#gt-lang-tgt div.jfk-button-checked")).getText().equals(lang))
{
// open the Source language dropdown
driver.findElement(By.id("gt-tl-gms")).click();

// select the desired language
driver.findElement(By.xpath("//div[@id='gt-tl-gms-menu']//div[text()='" + lang + "']")).click();
}
}

static public void translateText(String text)
{
driver.findElement(By.id("source")).sendKeys(text);
}

一个简单的测试看起来像

driver.get("https://translate.google.com/");
setSourceLanguage("English");
setTargetLanguage("Lao");
translateText("This is some text");
System.out.println(getTranslatedText());
<小时/>

完成这个练习后,我注意到文本翻译后的 URL 是 https://translate.google.com/#en/lo/This%20is%20some%20text 。我假设您没有测试谷歌翻译,而只是想要翻译?如果确实如此,您只需根据语言标记导航到 URL 并传入所需的文本即可。

URL 的格式为

https://translate.google.com/#<source language token>/<target language token>/<text to be translated>

所以越南语到英语就是

https://translate.google.com/#vi/en/This%20is%20some%20text

越南语到挪威语将是

https://translate.google.com/#vi/no/This%20is%20some%20text

然后您所要做的就是获取翻译后的文本。

关于java - 单击 id 定位的元素但结果仍然不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40104930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com