Как выбрать в списке один первый объект?

Правильно выше сказали что лучше получать через нужный протокол напрямую, а не веб интерфейс. Но если смотреть чисто по локаторам:

.b-messages [data-id]:nth-child(1)

ну или немного понятнее, все на любителя:

.b-messages [data-action="mail.message.show-or-select"]:nth-child(1)

2 лайка

Извините, вроде бы понятно и должно работать, но не работает :frowning:

driver.findElement(By.cssSelector(".b-messages [data-id]:nth-child(1)")).click();

Вижу что находит нужный блок, но когда запускаю полностью тест, он не открывает первое писмо в яндек.почте. :frowning:
Подскажите пожалуйста, что я только не перепробывала…

Ещё пробовала через xPath, получалось длинное выражение, но там проблема в том, что иногда получается рзное колличество вложений div

.//*[@id='js-page']/div/div[5]/div/div[3]/div/div[3]/div/div/div/div[1]/div[3]/div[3]/div/div[1]/div[2]/div/span/a[1]
т.е. в одном месте вместо div[3] иногда получается div[11], поэтому работает через раз

а вы дожидаетесь загрузки вссех писем на странице? или загрузки самих элемментов? какая ошибка в первом случае?
насчет xpath - не зацикливайтесь на повторении ВСЕХ тэгов, выше советовали что почитать

мой вариант
element = driver.find_element_by_xpath(’(//ul[@id=‘ListViewInner’]//a[@class=‘vip’])[1]’)
element.click()

К сожалению в яндекс.почте не присвоены id (

а просто найти первую ссылку с классом vip: (//a[@class=‘vip’])[1]
можете показать скрин фаербага?

Я пытаюсь открыть это письмо, в fireBug его находит, но когда я пишу код

driver.findElement(By.cssSelector(".b-messages [data-id]:nth-child(1)")).click();

письмо не открыватется (

попробуйте сл. xpath:
(//div[@class=‘b-messages b-messages_threaded’]//a[@class=‘b-messages__message__link daria-action’])[1]

написала

'     driver.findElement(By.xpath("//div[@class='b-messages b-messages_threaded']//a[@class='b-messages__message__link daria-action'])[1]")).click();


тоже почему то не работает, хотя по лигике должно работать (

у Вас скобка пропущена, попробуйте так:
element = driver.findElement(By.xpath("(//div[@class=‘b-messages b-messages_threaded’]//a[@class=‘b-messages__message__link daria-action’])[1]"));
element.click();

или

element = driver.findElement(By.xpath("(//div[@class=‘b-messages b-messages_threaded’]//a[@class=‘b-messages__message__link daria-action’])[1]"));
element.click();

Пишу Ваш код
WebElement element; element = driver.findElement(By.xpath("(//div[@class=\'b-messages b-messages_threaded\']//a[@class=\'b-messages__message__link daria-action\'])[1]")); element.click();
Всё равно ничего не открывается (

хм…Вы правы…(а) элемент не виден…написал быстрый тест на питоне для теста яндекс почты. Следующий код 100% рабочий и первое письмо открывается
element = driver.find_element_by_xpath("(//div[@class=‘b-messages b-messages_threaded’]//span[@class=‘b-messages__message__left__wrapper’])[1]");
element.click();

отсюда, правильный xpath:
(//div[@class=‘b-messages b-messages_threaded’]//span[@class=‘b-messages__message__left__wrapper’])[1]
п.с. скобки обьязательны.

Вы будете смеятся, но наверно я что то не то делаю делаю

Я вставляю Ваш код

WebElement element; element = driver.findElement(By.xpath("(//div[@class='b-messages b-messages_threaded']//span[@class='b-messages__message__left__wrapper'])[1]")); element.click();
и… ничго (

Предоставьте полный код теста, как вы все это делаете.

Вот мой код, я в начале заполняю форму на другом сайте, и мне нужно проверить что имено то что я заполнила в форме приходить на потчу. Я ищу в почту именно то письмо что я отправляла, по конкретным полям. Затем когда оно открывается в поиске хочу его открыть, но не получается.

`    
package test_feedback_form;
    
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;


public class test02CheckEmail {
  private WebDriver driver;
  private String baseUrl;

@Before
  public void setUp() throws Exception {
  driver = new FirefoxDriver();
  baseUrl = "https://mail.yandex.ru/";
  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
 
@Test
  public void testUntitled() throws Exception {
  driver.get(baseUrl + "/");

  driver.findElement(By.name("login")).clear();
  driver.findElement(By.name("login")).sendKeys("login");
  driver.findElement(By.name("passwd")).clear();
  driver.findElement(By.name("passwd")).sendKeys("passwd");
  driver.findElement(By.xpath("//button[@type='submit']")).click();

  driver.findElement(By.name("text")).clear();

  test01FeedbackSend newTest01 = new test01FeedbackSend();
  String strRandMessage = newTest01.RandMessageSend();

  driver.findElement(By.name("text")).sendKeys("id_message=" + strRandMessage);
  driver.findElement(By.xpath("//div[@id='js-page']/div/div[5]/div/div[3]/div/div[2]/div/div/div/div/div/form/div/button")).click();
  Thread.sleep(3000);

  WebElement element;
  element = driver.findElement(By.xpath("(//div[@class='b-messages b-messages_threaded']//span[@class='b-messages__message__left__wrapper'])[1]"));
  element.click();


   

 }

 @AfterClass
 public static void closeBrowser(){
  WebDriver driver = new FirefoxDriver();
  driver.quit();
}


}    

`

После того как Вы используете поиск по имейлам, первый элемент скрывается style=“display: none;” http://screencast.com/t/c209e7SQT5
вот собственно причина почему Вы не можете нажать на первый элемент :smile:

Весьма оригинальная конструкция. Да и к вопросу не имеет никакого отношения. Но я бы инициализацию драйвера в методе его закрытия все же посоветовал бы убрать. :wink:

Ну и на досуге не поленитесь заглянуть вот сюда:

Спасиюо, очень полезные видео. Пошла учить мат часть! :smile:

A post was split to a new topic: Как в JUnit задать сортировку на уровне классов

Для “спасибо” есть спец. кнопка. :wink:

1 лайк